import { weixinLogin } from "./login";
import { useUserStore } from "@/store";

// 配置基础URL
export const BASE_URL = "https://abc.qctrips.cn"; // 已修改为实际的API地址

// 创建请求函数
export const request = async (options) => {
    // 解构options参数
    const {
        url,
        method = "GET",
        data = {},
        header = {},
        loading = true,
    } = options;

    // 显示加载动画
    if (loading) {
        uni.showLoading({
            title: "加载中...",
            mask: true,
        });
    }

    try {
        // 处理URL
        const fullUrl = url.startsWith("http") ? url : BASE_URL + url;

        // 获取token
        const userStore = useUserStore();
        const accessToken =
            userStore.accessToken || uni.getStorageSync("accessToken");

        // 设置默认请求头
        const defaultHeader = {
            "Content-Type": "application/json",
            ...header,
        };

        // 如果有token，添加到请求头
        if (accessToken) {
            defaultHeader["Authorization"] = `${accessToken}`;
        }

        // 发送请求
        // 修复这里：新版本的uni.request()返回的是响应对象，而不是[error, response]数组
        const res = await uni.request({
            url: fullUrl,
            method,
            data,
            header: defaultHeader,
        });

        // 关闭加载动画
        if (loading) {
            uni.hideLoading();
        }

        // 处理业务逻辑错误
        if (res.statusCode !== 200) {
            throw new Error(`请求失败: ${res.statusCode}`);
        }

        // 处理token过期的情况
        if (
            res.statusCode === 200 &&
            (res.data.code === 401 || res.data.code === 4001)
        ) {
            console.log("检测到token过期，需要重新登录");
            // token过期，直接跳转到登录页面
            uni.reLaunch({
                url: "/public/login/login",
            });
            throw new Error("token已过期，请重新登录");
        }

        return res.data;
    } catch (error) {
        // 关闭加载动画
        if (loading) {
            uni.hideLoading();
        }

        // 显示错误提示
        if (error.message !== "网络请求失败") {
            uni.showToast({
                title: error.message || "请求失败",
                icon: "none",
            });
        }

        throw error;
    }
};

// 文件上传函数
export const uploadFile = async (filePath, fileName, loading) => {
    if (loading) {
        uni.showLoading({
            title: "上传中...",
            mask: true,
        });
    }
    uni.uploadFile({
        url: `${BASE_URL}/local-files/upload`,
        fileType: 'image',
        filePath,
        name: 'file',
        success: ({ data, code }) => {
            resolve(data.url)
            // 关闭加载动画
            if (loading) {
                uni.hideLoading();
            }
        },
        fail: (error) => {
            reject(error)
            // 关闭加载动画
            if (loading) {
                uni.hideLoading();
            }
        }
    })
};